package com.jsb.laundry.service.designpatterns.adapter.loginservice.impl;

import com.jsb.laundry.common.utils.JSBUtil;
import com.jsb.laundry.model.entity.TeamCentre;
import com.jsb.laundry.service.LoginService;
import com.wechat.pay.java.core.RSAConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class LevelPromotion {
    private static final Logger LOGGER = LoggerFactory.getLogger(LevelPromotion.class);

    private static LoginService loginService;

    public LevelPromotion() {
    }

    @Autowired
    public LevelPromotion(LoginService loginService) {
        LevelPromotion.loginService=loginService;
    }

    @PostConstruct
    public void init() {

    }
    /**
     * 等级晋升 (职位称号)
     * 邀请人数量        称号
     * 邀请10个骑手      组长
     * 下面有10个组长    主管
     * 下面有10个主管    总监
     * (默认)0 :专员，1：组长，2：主管，3：总监
     */
    public static void levelPromotion(String inviterId) {
        LOGGER.info("LaundryLoginController.levelPromotion等级晋升:{}", inviterId);
        //查看邀请人等级、和邀请人数、邀请人的邀请人id
        TeamCentre teamCentre = loginService.getRiderLevel(inviterId);
        Map<String, Integer> subLevel = getSubLevel(inviterId);

        //改变邀请人等级
        if ("3".equals(teamCentre.getUserLevel()) && subLevel.get("3") > 10) {
            LOGGER.info("等级已为3(总监):{}", inviterId);
        } else if ("2".equals(teamCentre.getUserLevel()) && subLevel.get("2") == 10) {
            LOGGER.info("改变等级为3(总监):{}", inviterId);
            loginService.updRiderLevel(inviterId, 3);
        } else if ("1".equals(teamCentre.getUserLevel()) && subLevel.get("1") == 10) {
            LOGGER.info("改变等级为2(主管):{}", inviterId);
            loginService.updRiderLevel(inviterId, 2);
        } else if ("0".equals(teamCentre.getUserLevel()) && teamCentre.getInviteNum() == 10) {
            LOGGER.info("改变等级为1:{}", inviterId);
            loginService.updRiderLevel(inviterId, 1);
        } else {
            LOGGER.info("未达到晋升条件:{}", inviterId);
        }

        if (teamCentre.getParentId() != null) {
            LOGGER.info("邀请人的邀请人id:{}", teamCentre.getParentId());
            levelPromotion(teamCentre.getParentId());
        }
    }
    /**
     * 获取当前邀请人的手下邀请Level
     *
     * @param inviterId
     * @return
     */
    private static Map<String, Integer> getSubLevel(String inviterId) {
        List<String> subLevel = new ArrayList<>();
        if (!JSBUtil.isEmptyString(inviterId)) {
            subLevel = loginService.getSubLevel(inviterId);
        }
        Map<String, Integer> res = new HashMap<>();
        res.put("0", 0);
        res.put("1", 0);
        res.put("2", 0);
        res.put("3", 0);
        for (String level : subLevel) {
            res.put(level, res.getOrDefault(level, 0) + 1);
        }
        return res;
    }
}
